unit Detalhe_pedido;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, Grids, DBGrids, StdCtrls, Buttons, Db, DBClient, dbtables, dm,
  TFlatButtonUnit;

type
  TfrmDetalhe_Pedido = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Label1: TLabel;
    l_cliente: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    lblPedido: TLabel;
    lblCliente: TLabel;
    lblRepresentante: TLabel;
    lblSupervisor: TLabel;
    lblRegra: TLabel;
    lblObs: TLabel;
    lblPed_dataped: TLabel;
    lblPed_datache: TLabel;
    dbgItens: TDBGrid;
    dsItens: TDataSource;
    lblComissao_rep: TLabel;
    lblComissao_sup: TLabel;
    lblPrazoMedio: TLabel;
    lblLiberado: TLabel;
    cdsItens: TClientDataSet;
    cdsItensitem: TStringField;
    cdsItensproduto: TStringField;
    cdsItensdescricao: TStringField;
    cdsItensqtde: TStringField;
    cdsItensvalorunitario: TStringField;
    cdsItensipi: TStringField;
    cdsItenscomissao: TStringField;
    cdsItensvalordesconto: TStringField;
    cdsItensvalortotal: TStringField;
    cdsItensprecogerado: TStringField;
    cdsItenspendente: TStringField;
    cdsItensordem: TStringField;
    cdsItensnf: TStringField;
    cdsItensserie: TStringField;
    cdsItensdesconto2: TFloatField;
    cdsItensdesconto3: TFloatField;
    cdsItensdesconto4: TFloatField;
    cdsItensdesconto5: TFloatField;
    cdsItensicms: TFloatField;
    cdsItensdesconto: TFloatField;
    Label12: TLabel;
    l_totalprod: TLabel;
    Label16: TLabel;
    l_desconto: TLabel;
    Label15: TLabel;
    l_valortotal: TLabel;
    Label17: TLabel;
    Lbl_DataFatura: TLabel;
    LblTF: TLabel;
    Label18: TLabel;
    LblValorIPI: TLabel;
    Label20: TLabel;
    LblValorIcms: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    LblVolumeTotal: TLabel;
    Label19: TLabel;
    l_empresa: TLabel;
    l_fornecedor: TLabel;
    Label2: TLabel;
    l_ipiadicional: TLabel;
    Label25: TLabel;
    l_acrescimo: TLabel;
    Label21: TLabel;
    Label26: TLabel;
    l_pipiadic: TLabel;
    l_pacrescimo: TLabel;
    Label27: TLabel;
    l_desctabela: TLabel;
    Label28: TLabel;
    l_transp: TLabel;
    BitBtn1: TFlatButton;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    function DescricaoProdutoEntidade(p_Entidade, p_Pro_Codigo, p_Pro_Nome: string): string;
    function DescricaoProdutoCodigo(p_Entidade, p_Pro_Codigo: string): string;
  public
    { Public declarations }
    bkp_pedido: string;
    cliente: string;
    Cod_Cliente: string;
    Detalhe_situacao: string;
    Detalhe_tipo: byte;
    tela_pedempresas: string;
  end;

var
  frmDetalhe_Pedido: TfrmDetalhe_Pedido;

implementation

uses biblio, clsBackupVenda, clsNotaVenda, clsEmpresa, clsBackup_PedCpa, clspedidocompra,
  clsBackup_pedido, clsPedidosvenda, clsRepresentante, clsSupervisor, clsRegrasPagto,
  clsItemPedVenda, clsProduto, clsBackup_NotaCompra, clsnotacompra, ClsItemPedCompra,
  clsMovItemPedCompra, clsPedTabela, clsTransportadora, clsParametros,
  clsProdutoEntidade, menu;

{$R *.DFM}

var
  backuppedido: TBackupPedido;
  backuppcompra: TBackup_PedCpa;
  pedidosVenda: TPedidosVenda;
  pedidocompra: TPedidoComp;
  representante: TRepresentante;
  supervisor: TSupervisor;
  regraspagto: TRegrasPagto;
  backup_venda: TBackupVenda;
  backupncompra: TBackup_NotaCompra;
  NotaVenda: TNotaVenda;
  notacompra: TNotaCompra;
  tq1: TQuery;
  itempedvenda: TItemPedVenda;
  itempedcompra: TItemPedCompra;
  movto_compra: TMovItemPedCompra;
  empresa: TEmpresa;
  produto: TProduto;
  ped_tabela: TPedTabela;
  transportadora: TTransportadora;
  parametros: TParametros;

procedure TfrmDetalhe_Pedido.BitBtn1Click(Sender: TObject);
begin
  close;
end;

function TfrmDetalhe_Pedido.DescricaoProdutoCodigo(p_Entidade,
  p_Pro_Codigo: string): string;
var
  ProdutoEntidade: TProdutoEntidade;
begin
  ProdutoEntidade := TProdutoEntidade.Create;
  ProdutoEntidade.Recuperar_Prod(p_Entidade, p_Pro_Codigo);
  Result := ProdutoEntidade.Pre_codigo_entidade;
  if Trim(Result) = '' then
    Result := p_Pro_Codigo;
  ProdutoEntidade.Free;   
end;

function TfrmDetalhe_Pedido.DescricaoProdutoEntidade(p_Entidade,
  p_Pro_Codigo, p_Pro_Nome: string): string;
var
  ProdutoEntidade: TProdutoEntidade;
begin
  ProdutoEntidade := TProdutoEntidade.Create;
  ProdutoEntidade.Recuperar_Prod(p_Entidade, p_Pro_Codigo);
  Result := ProdutoEntidade.Pre_Descricao;
  if Trim(Result) = '' then
    Result := p_Pro_Nome;
  ProdutoEntidade.Free;
end;

procedure TfrmDetalhe_Pedido.FormActivate(Sender: TObject);
var
  pedido1, pedido2: string;
  xbkp_numero, xbkp_cliente, xncompra, xscompra: string;
  val_desc, desc, valor, qtde, total: double;
  xaliqdesc2, xaliqdesc3, xaliqdesc4, xaliqdesc5, xvalor, xvalor_desc: double;
  valor2, xtot_ipi, xtot_icms, xtot_volume: double;
  xqtde_dec: integer;
  xTotProd, xVlrTot: Double;
  Refempresa : String;
  Emp0, Emp1 : String;
  dblvalor : Double;
begin
  if Detalhe_tipo = 0 then begin // Venda
    parametros.Recuperar('1');

    if parametros.Pro_QtdeDecimal = '3' then
      xqtde_dec := 1000
    else
      xqtde_dec := 100;

    backuppedido.RecuperarPedido(bkp_pedido, pedido1, pedido2);
    pedidosVenda.Recuperar(pedido1, pedido1);
    lblPedido.Caption := bkp_pedido;
    lblPed_dataped.caption := datetostr(pedidosVenda.ped_dataped);
    lblPed_datache.Caption := datetostr(pedidosVenda.ped_datache);
    lblCliente.Caption := cliente;
    LblTF.Caption := pedidosVenda.Conf_codigo;

    empresa.Recuperar(pedidosvenda.emp_codigo);
    l_empresa.caption := pedidosvenda.emp_codigo + '-' + empresa.Emp_Razao;

    representante.Recuperar(pedidosVenda.Rep_codigo);
    lblRepresentante.Caption := pedidosVenda.Rep_codigo + '-' + representante.Rep_nome;

    supervisor.Recuperar(pedidosVenda.Sup_codigo);
    lblSupervisor.Caption := pedidosVenda.Sup_codigo + '-' + supervisor.Sup_nome;

    regraspagto.Recuperar(pedidosVenda.Reg_codigo);
    lblRegra.Caption := pedidosVenda.Reg_codigo + '-' + regraspagto.Reg_descricao;
    lblObs.Caption := pedidosVenda.Ped_obs;

    ped_tabela.Recuperar(pedido1, pedido2);
    l_desctabela.caption := Formata_Percentual(ped_tabela.Pedt_desc1) + ' ' + Formata_Percentual(ped_tabela.Pedt_desc2) + ' ' +
      Formata_Percentual(ped_tabela.Pedt_desc3) + ' ' + Formata_Percentual(ped_tabela.Pedt_desc4) + ' ' +
      Formata_Percentual(ped_tabela.Pedt_desc5) + ' ' + Formata_Percentual(ped_tabela.Pedt_desc6) + ' ' +
      Formata_Percentual(ped_tabela.Pedt_desc7) + ' ' + Formata_Percentual(ped_tabela.Pedt_desc8) + ' ' +
      Formata_Percentual(ped_tabela.Pedt_desc9) + ' ' + Formata_Percentual(ped_tabela.Pedt_desc10);

    transportadora.Recuperar(pedidosvenda.Tran_codigo);
    l_transp.caption := pedidosvenda.Tran_codigo + ' - ' + transportadora.Tran_nome;
    lblComissao_rep.caption := formatfloat('##.### %', pedidosVenda.Ped_comisrep);
    lblComissao_sup.caption := formatfloat('##.### %', pedidosVenda.Ped_comissup);
    lblPrazoMedio.Caption := formatfloat('##0', pedidosVenda.Ped_prazomedio);

    if pedidosVenda.Ped_situacao = 'P' then
      lblLiberado.Caption := 'Pendente';

    if pedidosVenda.Ped_situacao = 'X' then
      lblLiberado.Caption := 'Fat.Parcial';

    if pedidosVenda.Ped_situacao = 'F' then
      lblLiberado.Caption := 'Fat.Total';

    if pedidosVenda.Ped_situacao = 'K' then
      lblLiberado.Caption := 'Cancelado';

    if pedidosVenda.Ped_situacao = 'A' then
      lblLiberado.Caption := 'Pendente';

    if pedidosVenda.Ped_situacao = 'J' then
      lblLiberado.Caption := 'Fat.Parcial';

    if pedidosVenda.Ped_situacao = 'T' then
      lblLiberado.Caption := 'Fat.Total';

    if pedidosVenda.Ped_situacao = 'C' then
      lblLiberado.Caption := 'Cancelado';

    l_pipiadic.caption := formatfloat('##.### %', 0);
    l_pacrescimo.caption := formatfloat('##.### %', 0);
    l_acrescimo.caption := format_valor(0);
    l_ipiadicional.caption := format_valor(0);

    l_totalprod.caption := format_valor(pedidosVenda.Ped_totalprod);
    l_desconto.caption := format_valor(pedidosVenda.Ped_desconto);
    l_valortotal.caption := format_valor(pedidosVenda.Ped_valor);

    itempedvenda.Consultar(tq1, pedido1);
    cdsItens.Active := False;
    cdsItens.CreateDataSet;
    cdsItens.Open;
    tq1.open;

    backup_venda := TBackupVenda.Create;
    Lbl_DataFatura.Caption := '';

    if Detalhe_situacao <> 'P' then begin
      Lbl_DataFatura.Visible := true;
      label17.Visible := true;

      NotaVenda := TNotaVenda.create;
      NotaVenda.Recuperar(tq1.fieldbyname('nota_serie').asstring, tq1.fieldbyname('nota_numero').asstring, '', tq1.fieldbyname('ent_codigo').asstring);
      Lbl_DataFatura.Caption := DateToStr(NotaVenda.Notv_datafat);
      NotaVenda.free;
    end else begin
      Lbl_DataFatura.Visible := false;
      label17.Visible := false;
    end;

    xtot_ipi := 0;
    xtot_icms := 0;
    xtot_volume := 0;
    while not tq1.eof do begin
      produto.Recuperar(tq1.fieldbyname('pro_codigo').asstring);
      cdsItens.Insert;
      qtde := tq1.fieldbyname('itpv_quantidade').asfloat;
      valor := tq1.fieldbyname('itpv_valorunit').asfloat;
      desc := tq1.fieldbyname('itpv_aliqdesc').asfloat;
      xaliqdesc2 := tq1.fieldbyname('itpv_desc2').asfloat;
      xaliqdesc3 := tq1.fieldbyname('itpv_desc3').asfloat;
      xaliqdesc4 := tq1.fieldbyname('itpv_desc4').asfloat;
      xaliqdesc5 := tq1.fieldbyname('itpv_desc5').asfloat;
      xvalor_desc := iv(((valor * desc) / 100) * 100) / 100;
      xvalor := valor - (iv(((valor * desc) / 100) * xqtde_dec) / xqtde_dec);
      xvalor_desc := xvalor_desc + (iv(((xvalor * xaliqdesc2) / 100) * 100) / 100);
      xvalor := xvalor - (iv(((xvalor * xaliqdesc2) / 100) * xqtde_dec) / xqtde_dec);
      xvalor_desc := xvalor_desc + (iv(((xvalor * xaliqdesc3) / 100) * 100) / 100);
      valor := xvalor - (iv(((xvalor * xaliqdesc3) / 100) * xqtde_dec) / xqtde_dec);
      xvalor_desc := xvalor_desc + (iv(((xvalor * xaliqdesc4) / 100) * 100) / 100);
      xvalor := xvalor - (iv(((xvalor * xaliqdesc4) / 100) * xqtde_dec) / xqtde_dec);
      xvalor_desc := xvalor_desc + (iv(((xvalor * xaliqdesc5) / 100) * 100) / 100);
      xvalor := xvalor - (iv(((xvalor * xaliqdesc5) / 100) * xqtde_dec) / xqtde_dec);
      val_desc := xvalor_desc * qtde;
      total := xvalor * qtde;

      cdsItens.FieldByName('Item').asstring := tq1.fieldbyname('ped_item').asstring;
      cdsItens.FieldByName('produto').asstring := tq1.fieldbyname('pro_codigo').asstring;
      cdsItens.FieldByName('descricao').asstring := Produto.Rec_DescVariacao(true, tq1.fieldbyname('pro_codigo').AsString, tq1.fieldbyname('ped_numero').AsString, tq1.fieldbyname('ped_item').AsString);
      cdsItens.FieldByName('qtde').asstring := formatfloat('##,###,##0.00000', qtde);
      if xqtde_dec = 100 then
        cdsItens.FieldByName('valorunitario').asstring := formatfloat('###,###,##0.00', valor)
      else
        cdsItens.FieldByName('valorunitario').asstring := formatfloat('##,###,##0.000', valor);

      cdsItens.FieldByName('desconto').asfloat := desc;
      cdsItens.FieldByName('desconto2').asfloat := xaliqdesc2;
      cdsItens.FieldByName('desconto3').asfloat := xaliqdesc3;
      cdsItens.FieldByName('desconto4').asfloat := xaliqdesc4;
      cdsItens.FieldByName('desconto5').asfloat := xaliqdesc5;
      cdsItens.FieldByName('ipi').asstring := formatfloat('##0.00 %', tq1.fieldbyname('itpv_aliqipi').asfloat);
      cdsItens.FieldByName('icms').asfloat := tq1.fieldbyname('itpv_aliqicms').asfloat;
      cdsItens.FieldByName('comissao').asstring := formatfloat('##0.00 %', tq1.fieldbyname('itpv_comisrep').asfloat);
      cdsItens.FieldByName('valordesconto').asstring := formatfloat('###,###,##0.00', val_desc);
      cdsItens.FieldByName('valortotal').asstring := formatfloat('###,###,##0.00', total);
      cdsItens.FieldByName('pendente').asstring := formatfloat('##,###,##0.00000', tq1.fieldbyname('itpv_pendente').asfloat);
      cdsItens.FieldByName('precogerado').asstring := formatfloat('###,###,##0.00', tq1.fieldbyname('itpv_precogerado').asfloat);
      cdsItens.FieldByName('ordem').asstring := tq1.fieldbyname('ord_numero').asstring;

      if pedidosVenda.Ped_situacao = 'P' then begin
        cdsItens.FieldByName('nf').asstring := '';
        cdsItens.FieldByName('serie').asstring := '';
      end else begin
        backup_venda.RecuperarBackup(tq1.fieldbyname('nota_serie').asstring, tq1.fieldbyname('nota_numero').asstring, xbkp_numero);
        cdsItens.FieldByName('nf').asstring := xbkp_numero;
        cdsItens.FieldByName('serie').asstring := tq1.fieldbyname('nota_serie').asstring;
      end;

      cdsItens.Post;
      //guarda o valor do ipi, icms e volume
      xtot_ipi := xtot_ipi + (((tq1.fieldbyname('Itpv_aliqipi').AsFloat * valor) / 100) * tq1.fieldbyname('Itpv_quantidade').AsFloat);
      xtot_icms := xtot_icms + (((tq1.fieldbyname('Itpv_aliqicms').AsFloat * Valor) / 100) * tq1.fieldbyname('Itpv_quantidade').AsFloat);
      xtot_volume := xtot_volume + (Produto.Pro_volume * tq1.fieldbyname('Itpv_quantidade').AsFloat);
      tq1.next;
    end;

    backup_venda.free;
    cdsItens.IndexFieldNames := 'Item';
    cdsItens.First;
    tq1.close;
  end else begin // Compra
    backuppcompra.Retorna_Pedidos(bkp_pedido, Cod_Cliente, pedido1, pedido2);
    pedidocompra.Recuperar(pedido1, Cod_Cliente);
    if pedido1 = pedido2 then
      pedido2 := '*';

    lblPedido.Caption := bkp_pedido;
    lblPed_dataped.caption := datetostr(pedidocompra.pedc_dataped);
    lblPed_datache.Caption := datetostr(pedidocompra.pedc_datache);
    lblCliente.Caption := cliente;
    LblTF.Caption := pedidocompra.Conf_Codigo;

    empresa.Recuperar(pedidocompra.emp_codigo);
    l_empresa.caption := pedidocompra.emp_codigo + '-' + empresa.Emp_Razao;
    lblRepresentante.Caption := '';
    lblSupervisor.Caption := '';

    regraspagto.Recuperar(pedidocompra.Reg_Codigo);
    lblRegra.Caption := pedidocompra.Reg_codigo + '-' + regraspagto.Reg_descricao;
    lblObs.Caption := '';
    lblComissao_rep.caption := formatfloat('##.### %', 0);
    lblComissao_sup.caption := formatfloat('##.### %', 0);
    lblPrazoMedio.Caption := formatfloat('##0', 0);

    if pedidocompra.Pedc_situacao = 'P' then
      lblLiberado.Caption := 'Pendente';

    if pedidocompra.Pedc_situacao = 'C' then
      lblLiberado.Caption := 'Confirmado';

    if pedidocompra.Pedc_situacao = 'K' then
      lblLiberado.Caption := 'Cancelado';

    if pedidocompra.Pedc_situacao = 'F' then
      lblLiberado.Caption := 'Faturado';

    if pedidocompra.Pedc_ValorAcresc > 0 then begin
      l_pipiadic.caption := formatfloat('##.### %', round((100 - (((pedidocompra.Pedc_ValorAcresc - pedidocompra.Pedc_IpiAdicional) / pedidocompra.Pedc_ValorAcresc) * 100)) * 100) / 100);
      l_pacrescimo.caption := formatfloat('##.### %', round((100 - (((pedidocompra.Pedc_totalproduto - pedidocompra.Pedc_ValorAcresc) / pedidocompra.Pedc_totalproduto) * 100)) * 100) / 100);
    end else begin
      l_pipiadic.caption := formatfloat('##.### %', 0);
      l_pacrescimo.caption := formatfloat('##.### %', 0);
    end;

    Emp0 := copy(tira_Aspas(tela_pedempresas),1,3);
    Emp1 := copy(tira_Aspas(tela_pedempresas),5,7);

    ////////////////////////////////
    itempedcompra.Consultar(tq1, pedido1, Cod_Cliente);
    cdsItens.Active := False;
    cdsItens.CreateDataSet;
    cdsItens.Open;
    tq1.open;

    Lbl_DataFatura.Caption := '';
    xncompra := '';
    xscompra := '';

    if pedidocompra.Pedc_situacao = 'F' then begin
      movto_compra.Retornar_Nota(pedido1, Cod_Cliente, xncompra, xscompra);
      Lbl_DataFatura.Visible := true;
      label17.Visible := true;

      NotaCompra.Recuperar(xncompra, xscompra, Cod_Cliente);
      Lbl_DataFatura.Caption := DateToStr(NotaCompra.Notc_datafatura);
    end else begin
      Lbl_DataFatura.Visible := false;
      label17.Visible := false;
    end;

    xtot_ipi := 0;
    xtot_icms := 0;
    xtot_volume := 0;

    while not tq1.eof do begin
      valor2 := 0;
      if pedido1 <> pedido2 then begin
        if pedido1 <> tq1.fieldbyname('Pedc_Numero').asstring then begin
          itempedcompra.Recuperar(pedido1, tq1.fieldbyname('ent_codigo').asstring, tq1.fieldbyname('Pedc_Item').asstring);
        end else begin
          itempedcompra.Recuperar(pedido2, tq1.fieldbyname('ent_codigo').asstring, tq1.fieldbyname('Pedc_Item').asstring);
        end;
        valor2 := itempedcompra.Itpc_valorunit;
      end;

      produto.Recuperar(tq1.fieldbyname('pro_codigo').asstring);
      cdsItens.Insert;
      qtde := tq1.fieldbyname('itpc_quantidade').asfloat;

      if (Emp0 = '101') then begin
          valor := valor2;
      end else if (Emp0 = '001') and (Emp1 = '101') then begin
          valor := tq1.fieldbyname('itpc_valorunit').asfloat + valor2;
          dblvalor := tq1.fieldbyname('itpc_valorunit').asfloat;
      end else if (Emp0 = '001') then
          valor := tq1.fieldbyname('itpc_valorunit').asfloat;
          
      desc := tq1.fieldbyname('itpc_desconto').asfloat;
      xaliqdesc2 := 0;
      xaliqdesc3 := 0;
      xaliqdesc4 := 0;
      xaliqdesc5 := 0;
      xvalor_desc := iv(((valor * desc) / 100) * 100) / 100;
      xvalor := valor - (iv(((valor * desc) / 100) * 100) / 100);
      xvalor_desc := xvalor_desc + (iv(((xvalor * xaliqdesc2) / 100) * 100) / 100);
      xvalor := xvalor - (iv(((xvalor * xaliqdesc2) / 100) * 100) / 100);
      xvalor_desc := xvalor_desc + (iv(((xvalor * xaliqdesc3) / 100) * 100) / 100);
      valor := xvalor - (iv(((xvalor * xaliqdesc3) / 100) * 100) / 100);
      xvalor_desc := xvalor_desc + (iv(((xvalor * xaliqdesc4) / 100) * 100) / 100);
      xvalor := xvalor - (iv(((xvalor * xaliqdesc4) / 100) * 100) / 100);
      xvalor_desc := xvalor_desc + (iv(((xvalor * xaliqdesc5) / 100) * 100) / 100);
      xvalor := xvalor - (iv(((xvalor * xaliqdesc5) / 100) * 100) / 100);
      val_desc := xvalor_desc * qtde;
      total := xvalor * qtde;

      cdsItens.FieldByName('Item').asstring := tq1.fieldbyname('pedc_item').asstring;
      cdsItens.FieldByName('produto').asstring := tq1.fieldbyname('pro_codigo').asstring;
      if FileExists(caminho_personal + 'Rhema') then begin
        cdsItens.FieldByName('produto').asstring := DescricaoProdutoCodigo(Cod_Cliente, tq1.fieldbyname('pro_codigo').AsString);
        cdsItens.FieldByName('descricao').asstring := DescricaoProdutoEntidade(Cod_Cliente, tq1.fieldbyname('pro_codigo').AsString, Produto.Rec_DescVariacao(true, tq1.fieldbyname('pro_codigo').AsString, tq1.fieldbyname('pedc_numero').AsString, tq1.fieldbyname('pedc_item').AsString));
      end else
        cdsItens.FieldByName('descricao').asstring := Produto.Rec_DescVariacao(true, tq1.fieldbyname('pro_codigo').AsString, tq1.fieldbyname('pedc_numero').AsString, tq1.fieldbyname('pedc_item').AsString);
      cdsItens.FieldByName('qtde').asstring := formatfloat('##,###,##0.00000', qtde);
      cdsItens.FieldByName('valorunitario').asstring := formatfloat('###,###,##0.00', valor);
      cdsItens.FieldByName('desconto').asfloat := desc;
      cdsItens.FieldByName('desconto2').asfloat := xaliqdesc2;
      cdsItens.FieldByName('desconto3').asfloat := xaliqdesc3;
      cdsItens.FieldByName('desconto4').asfloat := xaliqdesc4;
      cdsItens.FieldByName('desconto5').asfloat := xaliqdesc5;
      cdsItens.FieldByName('ipi').asstring := formatfloat('##0.00 %', tq1.fieldbyname('itpc_aliqipi').asfloat);
      cdsItens.FieldByName('icms').asfloat := tq1.fieldbyname('itpc_aliqicms').asfloat;
      cdsItens.FieldByName('comissao').asstring := formatfloat('##0.00 %', 0);
      cdsItens.FieldByName('valordesconto').asstring := formatfloat('###,###,##0.00', val_desc);
      cdsItens.FieldByName('valortotal').asstring := formatfloat('###,###,##0.00', total);
      cdsItens.FieldByName('pendente').asstring := formatfloat('##,###,##0.00000', tq1.fieldbyname('Itpc_qtde_pendente').asfloat);
      cdsItens.FieldByName('precogerado').asstring := formatfloat('###,###,##0.00', 0);
      cdsItens.FieldByName('ordem').asstring := '';

      backupncompra.RecuperarBackup(xscompra, xncompra, Cod_Cliente, xbkp_numero, xbkp_cliente);
      //cdsItens.FieldByName('nf').asstring:=tq1.fieldbyname('nota_numero').asstring;
      cdsItens.FieldByName('nf').asstring := xbkp_numero;
      cdsItens.FieldByName('serie').asstring := xscompra;
      cdsItens.Post;

      //guarda o valor do ipi, icms e volume
      if (Emp0 = '001') and (Emp1 = '101') then begin
        xtot_ipi := xtot_ipi + (((tq1.fieldbyname('Itpc_aliqipi').AsFloat * dblvalor) / 100) * tq1.fieldbyname('Itpc_quantidade').AsFloat);
        xtot_icms := xtot_icms + (((tq1.fieldbyname('Itpc_aliqicms').AsFloat * dblvalor) / 100) * tq1.fieldbyname('Itpc_quantidade').AsFloat);
      end else begin
        xtot_ipi := xtot_ipi + (((tq1.fieldbyname('Itpc_aliqipi').AsFloat * valor) / 100) * tq1.fieldbyname('Itpc_quantidade').AsFloat);
        xtot_icms := xtot_icms + (((tq1.fieldbyname('Itpc_aliqicms').AsFloat * Valor) / 100) * tq1.fieldbyname('Itpc_quantidade').AsFloat);
      end;

      xtot_volume := xtot_volume + (Produto.Pro_volume * tq1.fieldbyname('Itpc_quantidade').AsFloat);
      tq1.next;
    end;
     cdsItens.First;
     tq1.close;

    xTotProd := 0;
    xVlrTot  := 0;
    
     if (Emp0 = '101') then begin
      pedidocompra.Recuperar(pedido2, Cod_Cliente);
      xTotProd := pedidocompra.Pedc_totalproduto;
      xVlrTot := pedidocompra.Pedc_valor;
      l_totalprod.caption := format_valor(xTotProd);
      l_valortotal.caption := format_valor(xTotProd);
    end else if (Emp0 = '001') and (Emp1 = '101') then begin
      pedidocompra.Recuperar(pedido2, Cod_Cliente);
      xTotProd := pedidocompra.Pedc_totalproduto;
      xVlrTot := pedidocompra.Pedc_valor;
      pedidocompra.Recuperar(pedido1, Cod_Cliente);
      l_totalprod.caption := format_valor(pedidocompra.Pedc_totalproduto + xTotProd);
      l_valortotal.caption := format_valor(pedidocompra.Pedc_valor + xVlrTot);
    end else if (Emp0 = '001') then begin
      pedidocompra.Recuperar(pedido1, Cod_Cliente);
      l_totalprod.caption := format_valor(pedidocompra.Pedc_totalproduto);
      l_valortotal.caption := format_valor(pedidocompra.Pedc_valor);
    end;
    l_acrescimo.caption := format_valor(pedidocompra.Pedc_ValorAcresc);
    l_ipiadicional.caption := format_valor(pedidocompra.Pedc_IpiAdicional);
    l_desconto.caption := format_valor(pedidocompra.Pedc_desconto);


  end;
  if Emp0 = '101' then begin
     LblValorIPI.Caption := format_valor(0);
     LblValorIcms.Caption := format_valor(0);
  end else begin
     LblValorIPI.Caption := format_valor(xtot_ipi);
     LblValorIcms.Caption := format_valor(xtot_icms);
  end;
  LblVolumeTotal.Caption := Formata_Qtde(xtot_volume);
end;

procedure TfrmDetalhe_Pedido.FormCreate(Sender: TObject);
begin
  backuppedido := TBackupPedido.Create;
  pedidosvenda := TPedidosvenda.Create;
  representante := TRepresentante.Create;
  supervisor := TSupervisor.Create;
  regraspagto := TRegrasPagto.Create;
  produto := Tproduto.create;
  empresa := TEmpresa.Create;

  tq1 := tquery.Create(dmint);
  tq1.databasename := dmint.db.databasename;

  itempedvenda := TItemPedVenda.Create;
  backuppcompra := TBackup_PedCpa.Create;
  pedidocompra := TPedidoComp.Create;
  backupncompra := TBackup_NotaCompra.Create;
  notacompra := TNotaCompra.Create;
  itempedcompra := TItemPedCompra.Create;
  movto_compra := TMovItemPedCompra.Create;
  ped_tabela := TPedTabela.Create;
  transportadora := TTransportadora.Create;
  parametros := TParametros.Create;
  l_cliente.visible := Detalhe_tipo = 0;
  l_fornecedor.visible := Detalhe_tipo = 1;
end;

procedure TfrmDetalhe_Pedido.FormDestroy(Sender: TObject);
begin
  ped_tabela.free;
  backuppedido.Free;
  pedidosvenda.Free;
  representante.Free;
  supervisor.Free;
  regraspagto.Free;
  tq1.close;
  tq1.Free;
  itempedvenda.Free;
  produto.Free;
  empresa.free;
  backuppcompra.free;
  pedidocompra.free;
  backupncompra.free;
  notacompra.free;
  itempedcompra.free;
  movto_compra.free;
  transportadora.free;
  parametros.free;
end;

end.

